import _ from 'lodash';
import { ElMessage } from 'element-plus';
import moment from 'moment';
import { Md5 } from 'ts-md5';

// 复制文本
export const copyText = (value: string) => {
  // navigator.clipboard.writeText(value);
  const input = document.createElement('input');
  input.value = value;
  document.body.appendChild(input);
  input.select();
  document.execCommand('copy');
  document.body.removeChild(input);

  ElMessage.success('复制成功');
};

// 加签 + md5加密
export const handleSign = (obj: any) => {
  const sortedKeys = Object.keys(obj).sort(); // 按照 ASCII 字母顺序排序键
  const keyValuePairs = sortedKeys.map((key) => `${key}=${obj[key]}`); // 将键值对拼接成 key=value 的形式
  const result = keyValuePairs.join('&') + '&key=' + signKey; // 用 & 符号连接键值对
  // 逐步添加数据，直到所有数据被添加完毕，再用end进行最终算法。期望是ASCII字符，中文不是ASCII字符

  // const md5: any = new Md5().appendAsciiStr(result).end();
  const md5: any = Md5.hashStr(result).toString();
  return md5.toUpperCase();
};

// 去除空值并转普通对象
export const filterParams = (params: { [key: string]: any } = {}) => {
  // 去除空值
  const temp = Object.keys(params).filter(
    (key) => params[key] !== null && params[key] !== undefined && params[key] !== ''
  );
  // 转普通对象
  const obj = JSON.parse(JSON.stringify(params));
  return _.pick(obj, temp);
};

// 时间格式化
export const handleTime = (time: number | string, format: string = 'yyyy-MM-DD HH:mm:ss') => {
  return time ? moment(time).format(format) : '';
};

// 处理空值
export const handleEmpty = (value: string | number, str: string | number = '-') => {
  return value || str;
};

// 用户状态
export const onUserStatus = (status?: number | string) => {
  switch (status) {
    case '0':
      return { class: 'success', label: '正常登陆' };
    case '1':
      return { class: 'danger', label: '已锁定' };
  }
};

// 缓存表头取值
export const handleColumn = (arr1: IColumn[], arr2: IColumn[]) => {
  if (arr2) {
    // 使用循环遍历第一个数组对象，并用第二个数组对象中的对应属性覆盖
    for (let i = 0; i < arr1.length; i++) {
      arr1[i] = Object.assign(arr1[i], arr2[i]);
    }
  }
  return arr1;
};

// 获取token
export const getToken = () => {
  return localStorage.getItem('token');
};
